制作 img 镜像


1.更新源

sudo apt-get update

2.安装依赖

sudo apt-get install fakeroot build-essential ncurses-dev xz-utils
sudo apt-get install libssl-dev bc flex libelf-dev bison

3.编译内核

https://www.kernel.org/ 下载一个 Linux 内核,并放在用户目录下

解压内核(把 * 换成对应的版本号)

tar -xvf linux-*.tar.xz

配置编译 x86_64 内核

cd linux-*
make x86_64_defconfig
make bzImage -j$(nproc)

复制到用户目录下备用

sudo cp arch/x86/boot/bzImage ~/

4.制作 initrd

cd ~/
sudo mkinitramfs -o ~/initrd

5.创建镜像

镜像大小根据内核大小来定

dd if=/dev/zero of=linux.img bs=1M count=256

给镜像创建分区

fdisk linux.img

(n p 回车 回车 回车 w)

图片

查看镜像的分区情况

fdisk -l linux.img
图片

6.挂载为 loop 设备

sudo losetup -fP linux.img
LOOPDEV=$(losetup -j linux.img | cut -d: -f1)

7.挂载分区

sudo mkfs.ext4 ${LOOPDEV}p1
sudo mkdir -p mnt/data
sudo mount ${LOOPDEV}p1 mnt/data

8.安装 Legacy 启动的文件

sudo grub-install --boot-directory=mnt/data/boot/ --target=i386-pc --modules=part_msdos linux.img

9.创建 GRUB 配置文件

sudo nano mnt/data/boot/grub/grub.cfg

输入以下内容

set timeout=10
menuentry 'Linux' {
  linux (hd0,msdos1)/casper/bzImage console=tty0
  initrd (hd0,msdos1)/casper/initrd
}

按 Ctrl+O 保存,按 Ctrl+X 关闭


10.复制内核到分区

sudo mkdir -p ~/mnt/data/casper
sudo cp ~/bzImage ~/mnt/data/casper/
sudo cp ~/initrd ~/mnt/data/casper/

11.卸载分区和镜像

sudo umount mnt/data
sudo losetup -d $LOOPDEV

启动镜像

注:此方法只支持 Legacy 启动

可通过 qemu 启动,或刻录到U盘启动